/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.ModeloMaterial;
import com.ipartek.formacion.gestformwww.modelo.ModeloCurso;
import com.ipartek.formacion.gestformwww.modelo.ModeloEntrega;
import com.ipartek.formacion.gestformwww.modelo.beans.Material;
import com.ipartek.formacion.gestformwww.modelo.beans.Curso;
import com.ipartek.formacion.gestformwww.modelo.beans.Entrega;
import com.ipartek.formacion.gestformwww.modelo.beans.FiltroMaterial;

import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.util.ArrayList;
import java.util.Date;
import java.util.ResourceBundle;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Iratxe-Jon
 */
public class ImportarMaterialAccion implements Accion {

    private final String listarcurso = "listar-cursos-accion";
    private final String importarMaterialJSP = "listar-material-importar";
    public final int ESTADO_PEDIDO_A_MACHETE_HAY_QUE_MIRARLO = 14;

    /**
     * Visualiza los candidatos que estan en otras convocatorias
     * @param servlet
     * @param request
     * @param response
     * @return el router
     */
    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        HttpSession sesion = request.getSession(false);
        AccionRouter router = null;
        FiltroMaterial filtro = null;
        AccionServlet as = (AccionServlet) servlet;
        ArrayList<String> mensajes = new ArrayList<String>();
         ArrayList<String> errors = new ArrayList<String>();
        int numPags;
        int numeroMateriales = 0;
        int idCurso = 0;
        Curso curso = null;
        boolean existecurso = false;
        ArrayList<Material> materiales = null;
        ArrayList<Integer> mats = new ArrayList<Integer>();
        ModeloCurso modelo = (ModeloCurso) servlet.getServletContext().getAttribute("ModeloCurso");
        ModeloMaterial mmaterial = (ModeloMaterial) servlet.getServletContext().getAttribute("ModeloMaterial");

        ModeloEntrega mentrega = (ModeloEntrega) servlet.getServletContext().getAttribute("ModeloEntrega");





        ResourceBundle bundle = (ResourceBundle) servlet.getServletContext().getAttribute("acciones-mapeo");
        if (sesion.getAttribute("usuario") != null) {
            if (sesion.getAttribute("filtromaterialasignar") != null) {
                filtro = (FiltroMaterial) sesion.getAttribute("filtromaterialasignar");
            } else {
                filtro = new FiltroMaterial(bundle);
            }
            //if(Verificador.numeroValido(request.getParameter("idCon")) || (request.getAttribute("idCon") != null)){
            if (request.getParameter("idCurso") != null) {
                idCurso = Integer.parseInt(request.getParameter("idCurso"));
                existecurso = true;
                //filtro.setcurId(idCurso);

            } else if (request.getAttribute("idCurso") != null) {
                idCurso = (Integer) request.getAttribute("idCurso");
                existecurso = true;
                //filtro.setcurId(idCurso);
            }
            if (existecurso) {

                //si se han seleccionado materiales y se ha pulsado en asignar, entra aqui y hace la inserción
                //la tabla de entregas
                if (request.getParameterValues("listaLibId") != null) {
                    for (String mat : (String[]) request.getParameterValues("listaLibId")) {
                        mats.add(Integer.parseInt(mat));
                    }

                    for (int matId : mats) {
                        Entrega entrega = new Entrega();
                        entrega.setLibId(matId);
                        entrega.setCurId(idCurso);
                        Date fecha = new Date();
                        entrega.setEntFecha(fecha.toString());
                        entrega.setEstPedido(ESTADO_PEDIDO_A_MACHETE_HAY_QUE_MIRARLO);

                        try {
                            mentrega.insertarEntrega(entrega);
                        } catch (GestorFormacionExcepcion ex) {
                            Logger.getLogger(ImportarMaterialAccion.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                    mensajes.add("entrega-asignada-correcto");

                }
                if ((request.getParameter("filtroISBNMaterial") != null)) {
                    filtro.setISBN(request.getParameter("filtroISBNMaterial"));
                }
                if ((request.getParameter("filtroAutorMaterial") != null)) {
                    filtro.setLibAutor(request.getParameter("filtroAutorMaterial"));
                }
                if ((request.getParameter("filtroEditorialMaterial") != null)) {
                    filtro.setLibEditorial(request.getParameter("filtroEditorialMaterial"));
                }
                if ((request.getParameter("filtroTituloMaterial") != null)) {
                    filtro.setLibTitulo(request.getParameter("filtroTituloMaterial"));
                }
                if ((request.getParameter("filtroOrden") != null)) {
                    filtro.setOrden(request.getParameter("filtroOrden"));
                }
                if ((request.getParameter("filtroColumna") != null)) {
                    filtro.setColumnafiltrar(request.getParameter("filtroColumna"));
                }
                if ((request.getParameter("RegistroPagina") != null)) {
                    filtro.setElementospag(request.getParameter("RegistroPagina"));
                }
                if ((request.getParameter("id") != null)) {
                    filtro.setPagsiguiente(request.getParameter("id"));
                }
                sesion.setAttribute("filtromaterialasignar", filtro);

                try {

                    materiales = mmaterial.listarMateriales(filtro);
                    numeroMateriales = mmaterial.contarMaterial(filtro);
                    curso = modelo.visualizarCurso(idCurso);
                } catch (GestorFormacionExcepcion ex) {
                    Logger.getLogger(ImportarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    sesion.setAttribute("excepciones", ex.getMessage());
                }

                request.setAttribute("listaMaterialesAsignar", materiales);
                numPags = filtro.getElementospag();

                if (numeroMateriales == 0) {
                    ResourceBundle errores = (ResourceBundle) servlet.getServletContext().getAttribute("errores-mapeo");
                    request.setAttribute("error", errores.getString("error-sin-resultados"));
                }
                request.setAttribute("numeroMateriales", numeroMateriales);
                int totalpaginas = numeroMateriales / numPags;
                if ((numeroMateriales % numPags) != 0) {
                    totalpaginas++;
                }
                request.setAttribute("curNom", curso.getCurNom());
                request.setAttribute("totalPagAsignarMaterial", totalpaginas);
                request.setAttribute("contenido", importarMaterialJSP);

                request.setAttribute("listaMateriales", "mostrar");
                sesion.setAttribute("mensajes", mensajes);
                router = new AccionRouter("principal");
            } else {
                //router = new AccionRouter("inicio", false);

                sesion.setAttribute("mensajes", mensajes);
                request.setAttribute("contenido", importarMaterialJSP);

                request.setAttribute("listaMaterial", "noMostrar");

                router = new AccionRouter("principal");
            }

        } else {
            try {
                router = as.getFactory().getAction(as.getNombreClaseRecurso(listarcurso), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(VisualizarCursoAccion.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                Logger.getLogger(VisualizarCursoAccion.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(VisualizarCursoAccion.class.getName()).log(Level.SEVERE, null, ex);
            }

        }


        return router;
    }
}
